package com.example.coreshopapp.utils;

import android.content.Context;
import android.util.DisplayMetrics;
import android.view.Display;
import android.view.WindowManager;

//屏幕相关工具类
public class ScreenUtil {

//    sw 限定符适配即 smallestWidth 适配，也叫最小宽度限定符适配。
//
//    它的原理是，Android 会识别屏幕可用高度和宽度的最小尺寸的 dp 值，然后根据识别到的结果去 资源文件 中寻找对应限定符的文件夹下的资源文件。其实就是系统通过特定的规则来选择对应的文件。
//    某手机的屏幕分辨率是 1080 * 1920，屏幕像素密度是 480 dpi，通过计算，
//    它的最大宽度对应的 dp 值是：1080 / (480 / 160) = 360 dp  884.7  784  683  640
//    根据这个 360 dp 值，系统会去寻找 value-sw360dp 的文件夹以及对应的资源文件并使用它。
//    如果没有 value-sw360dp 文件夹，系统会向下寻找，比如离 360 dp 最近的只有 value-sw350dp，那么Android就会选择 value-sw350dp 文件夹下面的资源文件。
    //小米平板 1568x2560  320
    //1568/(320/160)=784

    //小米手机 1036x2434  440
    //1036/(440/160)=376

    public static int getDensityDPI(Context context){
        // 获取屏幕的DisplayMetrics
//        DisplayMetrics displayMetrics = new DisplayMetrics();
//        getWindowManager().getDefaultDisplay().getMetrics(displayMetrics);

        WindowManager windowManager = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);
        Display display = windowManager.getDefaultDisplay();
        DisplayMetrics displayMetrics = new DisplayMetrics();
        display.getMetrics(displayMetrics);
        // 获取屏幕的像素密度
        return displayMetrics.densityDpi;
    }


    public static int getScreenWidth(Context context) {
        WindowManager windowManager = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);
        Display display = windowManager.getDefaultDisplay();
        DisplayMetrics displayMetrics = new DisplayMetrics();
        display.getMetrics(displayMetrics);
        return displayMetrics.widthPixels;
    }

    public static int getScreenHeight(Context context) {
        WindowManager windowManager = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);
        Display display = windowManager.getDefaultDisplay();
        DisplayMetrics displayMetrics = new DisplayMetrics();
        display.getMetrics(displayMetrics);
        return displayMetrics.heightPixels;
    }


    public static int dip2px(Context context, float dpValue) {
        final float scale = context.getResources().getDisplayMetrics().density;
        return (int) (dpValue * scale + 0.5f);
    }




}

